草庐IT

GCD ③ dispatch_barrier

全部标签

ios - dispatch_sync 总是在主线程上调度一个 block

我正在使用dispatch_sync执行一个block,并且该block已正确执行。但是这个block是在主线程上执行的。根据Apple文档:Serialqueues(alsoknownasprivatedispatchqueues)executeonetaskatatimeintheorderinwhichtheyareaddedtothequeue.Thecurrentlyexecutingtaskrunsonadistinctthread(whichcanvaryfromtasktotask)thatismanagedbythedispatchqueue.这意味着(或者我的理解)

ios - GCD 中的 .userInitiated 和 .userInteractive 有什么区别?

我想知道它们之间有什么区别,我正在尝试更新UI中的某些内容,因此我必须使用主线程来完成它,但不确定我应该使用它们中的哪一个来完成我想要的。谢谢 最佳答案 “用户启动”意味着用户直接请求了这个操作,并且很可能在等待,但UI本身并不迫切需要结果。“获取新推文,因为用户执行了下拉刷新”或“重新计算小费”。这些事情需要迅速发生,但不是立即发生。一旦计算完成,您可能不会立即再次请求它。“用户交互”是指用户直接与该操作的结果进行实时交互。UI现在需要一个结果,否则会出现滞后。您可能会快速而反复地请求此操作。这是最高优先级。有关这些类的完整详细信

ios - GCD 中的 .userInitiated 和 .userInteractive 有什么区别?

我想知道它们之间有什么区别,我正在尝试更新UI中的某些内容,因此我必须使用主线程来完成它,但不确定我应该使用它们中的哪一个来完成我想要的。谢谢 最佳答案 “用户启动”意味着用户直接请求了这个操作,并且很可能在等待,但UI本身并不迫切需要结果。“获取新推文,因为用户执行了下拉刷新”或“重新计算小费”。这些事情需要迅速发生,但不是立即发生。一旦计算完成,您可能不会立即再次请求它。“用户交互”是指用户直接与该操作的结果进行实时交互。UI现在需要一个结果,否则会出现滞后。您可能会快速而反复地请求此操作。这是最高优先级。有关这些类的完整详细信

ios - 等效于 iOS 3.x 中的 GCD 串行调度队列

Apple的GrandCentralDispatch(GCD)很棒,但只能在iOS4.0或更高版本上运行。苹果的documentation说,“[A]序列化操作队列不提供与GrandCentralDispatch中的串行调度队列完全相同的行为”(因为队列不是FIFO,但顺序由依赖性和优先级决定)。在支持GCD发布之前的OS版本的同时,如何实现与GCD的串行调度队列相同的效果的正确方法是什么?或者换句话说,在希望支持低于4.0版本的iOS应用程序中处理简单后台处理(执行Web服务请求等)的推荐方法是什么? 最佳答案 这个PseudoS

ios - 等效于 iOS 3.x 中的 GCD 串行调度队列

Apple的GrandCentralDispatch(GCD)很棒,但只能在iOS4.0或更高版本上运行。苹果的documentation说,“[A]序列化操作队列不提供与GrandCentralDispatch中的串行调度队列完全相同的行为”(因为队列不是FIFO,但顺序由依赖性和优先级决定)。在支持GCD发布之前的OS版本的同时,如何实现与GCD的串行调度队列相同的效果的正确方法是什么?或者换句话说,在希望支持低于4.0版本的iOS应用程序中处理简单后台处理(执行Web服务请求等)的推荐方法是什么? 最佳答案 这个PseudoS

ios - 同步块(synchronized block)和 dispatch_async

当我们在block中调用dispatch_async()时,使用@synchronized()的IOS中的锁会发生什么。例如:idmyID-(void)foobar{@synchronized(myID){dispatch_async(){//dostuffwithmyID};}}锁在dispatch_async调用中是否仍然有效?或者更重要的是,在dispatch_async()中使用另一个@synchronized()调用有什么缺点吗? 最佳答案 假设您正在尝试同步与后台队列中的此myID对象的交互,您希望它以相反的方式进行,即

ios - 同步块(synchronized block)和 dispatch_async

当我们在block中调用dispatch_async()时,使用@synchronized()的IOS中的锁会发生什么。例如:idmyID-(void)foobar{@synchronized(myID){dispatch_async(){//dostuffwithmyID};}}锁在dispatch_async调用中是否仍然有效?或者更重要的是,在dispatch_async()中使用另一个@synchronized()调用有什么缺点吗? 最佳答案 假设您正在尝试同步与后台队列中的此myID对象的交互,您希望它以相反的方式进行,即

ios - NSOperationQueue 与 GCD

在什么情况下您更愿意使用NSOperationQueue而不是GCD?根据我对这两者的有限经验,我认为使用NSOperationQueue您基本上可以控制并发操作的数量。对于GCD,您不能这样做,因为您使用的是队列。除了你可以用多核处理器以某种方式模拟它,尽管我仍然认为没有办法控制它。 最佳答案 NSOperationQueue构建于iOS4的GCD之上。为手头的任务使用最简单的API。衡量它是否是性能问题,然后在需要时重新评估。dispatch_async是较低级别的,通常是C类型的东西(但不限于),适用于一次性和顺序类型的交易。

ios - NSOperationQueue 与 GCD

在什么情况下您更愿意使用NSOperationQueue而不是GCD?根据我对这两者的有限经验,我认为使用NSOperationQueue您基本上可以控制并发操作的数量。对于GCD,您不能这样做,因为您使用的是队列。除了你可以用多核处理器以某种方式模拟它,尽管我仍然认为没有办法控制它。 最佳答案 NSOperationQueue构建于iOS4的GCD之上。为手头的任务使用最简单的API。衡量它是否是性能问题,然后在需要时重新评估。dispatch_async是较低级别的,通常是C类型的东西(但不限于),适用于一次性和顺序类型的交易。

ios - 防止 dispatch_after() 后台任务被执行

这是我的问题。当我的应用程序进入后台时,我希望它在一段时间后执行一个功能。这就是我所做的:-(void)applicationDidEnterBackground:(UIApplication*)application{isRunningInBackground=YES;taskIdentifier=[[UIApplicationsharedApplication]beginBackgroundTaskWithExpirationHandler:nil];int64_tdelayInSeconds=30;dispatch_time_tpopTime=dispatch_time(DISP